From 20fb64704df2b4218d4d04e80b143f5daf1d3f77 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 15 Apr 2021 16:59:02 -0400 Subject: [PATCH] imcontext: Eat key events during preedit Avoid passing through random key press or release events while we are showing preedit. That prevents 'accidents' like typing Ctrl-. bringing up the Emoji chooser during preedit, or hitting Ctrl-a after the Compose key moving the 'dot' around in vim in terminals. --- gtk/gtkimcontextsimple.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c index 71044294e5..a3a2c54c8f 100644 --- a/gtk/gtkimcontextsimple.c +++ b/gtk/gtkimcontextsimple.c @@ -761,13 +761,21 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, } } + if (priv->in_hex_sequence || priv->in_compose_sequence) + return TRUE; /* Don't leak random key events during preedit */ + return FALSE; } /* Ignore modifier key presses */ for (i = 0; i < G_N_ELEMENTS (gtk_compose_ignore); i++) if (keyval == gtk_compose_ignore[i]) - return FALSE; + { + if (priv->in_hex_sequence || priv->in_compose_sequence) + return TRUE; /* Don't leak random key events during preedit */ + + return FALSE; + } hex_mod_mask = GDK_CONTROL_MASK|GDK_SHIFT_MASK; @@ -802,16 +810,23 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, no_text_input_mask = GDK_ALT_MASK|GDK_CONTROL_MASK; - if (state & no_text_input_mask || - (priv->in_hex_sequence && priv->modifiers_dropped && - (keyval == GDK_KEY_Return || - keyval == GDK_KEY_ISO_Enter || - keyval == GDK_KEY_KP_Enter))) + if (priv->in_hex_sequence && priv->modifiers_dropped && + (keyval == GDK_KEY_Return || + keyval == GDK_KEY_ISO_Enter || + keyval == GDK_KEY_KP_Enter)) { return FALSE; } + + if (state & no_text_input_mask) + { + if (priv->in_hex_sequence || priv->in_compose_sequence) + return TRUE; /* Don't leak random key events during preedit */ + + return FALSE; + } } - + /* Handle backspace */ if (priv->in_hex_sequence && have_hex_mods && is_backspace) { -- 2.30.2